package com.iuie.ns.datum.service;

import java.io.IOException;
import java.io.Serializable;

import javax.servlet.http.HttpServletResponse;

import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import com.iuie.ns.datum.vo.FileInfoVO;

public interface IFileService {
	
	/**
	 * 新增一个文件
	 * @param file 文件信息
	 * @param immediately 是否立即保存
	 * @param fileType blog/file
	 * @param targetId 一对多附件
	 * @throws IOException
	 */
	FileInfoVO addOneFile(MultipartFile file, Boolean immediately, String fileType, String targetId) throws IOException;
	
	/**
	 * 通过文件内容新增一个文件
	 * @param content 文件内容
	 * @param fileType 文件类型，file/blog
	 * @param fileName 文件名，可以传入空值
	 * @return
	 * @throws IOException
	 */
	FileInfoVO newFileWithContent(String content, String fileType, String fileName) throws IOException;
	
	/**
	 * 根据文件内容和文件标题修改文件
	 * @param fileId 文件ID
	 * @param content 文件内容
	 * @param fileType 文件类型，file/blog
	 * @param fileName 文件名，可以传入空值
	 * @return
	 * @throws IOException
	 */
	FileInfoVO updateFileWithContent(Long fileId, String content, String fileType, String fileName) throws IOException;

	/**
	 * 删除文件，当文件删除后才能删除文件信息
	 * @param fileId 文件ID
	 */
	void deleteFileById(Serializable fileId);
	/**
	 * 删除文件
	 * @param fileId 文件ID
	 * @param deleteTag 标记删除文件失败时，是否删除文件信息
	 */
	void deleteFileById(Serializable fileId, boolean deleteTag);
	
	/**
	 * 根据targetId删除文件和文件信息
	 * @param targetId
	 * @date 2018年6月20日上午8:08:27
	 */
	void deleteFileByTargetId(String targetId);
	/**
	 * 
	 * 下载文件
	 * @param fileId 文件ID
	 * @return 文件的字节流
	 * @throws IOException
	 */
	ResponseEntity<byte[]> fileDownload(Serializable fileId,Boolean download) throws IOException;

	/**
	 * 适合大文件的下载方式
	 * @param fileId
	 * @param download
	 * @param resp
	 */
	void fileDownload(Serializable fileId, Boolean download, HttpServletResponse resp) throws IOException ;
	
	/**
	 * 更改文件名，使其合法
	 * @param fileId
	 * @throws IOException
	 */
	void letFileNameLegal(Serializable fileId) throws IOException;

	/**
	 * 自动修复文件大小
	 * @param fileId
	 */
	void updateFileSizeAuto(Long fileId);

	/**
	 * 打开文件夹
	 * @param fileId
	 * @throws Exception 
	 * @date 2018年6月7日上午8:36:41
	 */
	void openFolder(Long fileId) throws Exception;

	/**
	 * 打开文件
	 * @param fileId
	 * @date 2018年6月9日下午5:09:52
	 */
	void openFile(Long fileId);
}
